package cn.lxb.web.starter.template.service.impl;

import cn.lxb.web.starter.template.service.BaseService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.io.Serializable;
import java.util.List;

/**
 * 基本服务接口实现
 *
 * @param <T>  数据类型
 * @param <PK> 实体主键类型
 * @author 54lxb
 * @since 2019-11-20
 */
@Transactional(rollbackFor = Exception.class)
public class BaseServiceImpl<M extends BaseMapper<T>, T, PK extends Serializable> implements BaseService<T, PK> {

    @Autowired
    protected M mapper;

    @Override
    public T selectById(PK id) {
        return mapper.selectById(id);
    }

    @Override
    public List<T> selectList(QueryWrapper<T> queryWrapper) {
        return mapper.selectList(queryWrapper);
    }

    @Override
    public int selectCount(QueryWrapper<T> queryWrapper) {
        return mapper.selectCount(queryWrapper);
    }

    @Override
    public void updateById(T entity) {
        mapper.updateById(entity);
    }

    /**
     * 更新前
     *
     * @param entity 实体
     */
    protected void updateBefore(T entity) {

    }

    /**
     * 更新后
     *
     * @param entity 实体
     */
    protected void updateAfter(T entity) {

    }


    @Override
    public void deleteById(PK id) {
        mapper.deleteById(id);
    }

    /**
     * 删除前
     *
     * @param entity 实体
     */
    protected void deleteBefore(T entity) {

    }

    /**
     * 删除后
     *
     * @param entity 实体
     */
    protected void deleteAfter(T entity) {

    }

    @Override
    public void insert(T entity) {
        mapper.insert(entity);
    }

    /**
     * 添加前
     *
     * @param entity 实体
     */
    protected void insertBefore(T entity) {

    }

    /**
     * 添加后
     *
     * @param entity 实体
     */
    protected void insertAfter(T entity) {

    }
}
